SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dbo].[LIQMaterialDidactico]
@Agente INT,
@Servicio INT,
@Plaza INT,
@Resultado DECIMAL OUTPUT,
@idLiquidacion INT,
@DiasALiquidar INT, 
@DiasDelPeriodo INT,
@Desde DATETIME,
@Hasta DATETIME
AS 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- REGISTRO DE ACTUALIZACIONES
-- 18/11/2005 - Se agregaron parametros @Desde y @Hasta para manejo de Fechas en Titulares y Suplentes
-- 09/07/2006 - Los parametros se obtienen de la funcion fnObtenerValorDeParametro con la fecha que corresponda.
-- 04/06/2008 - 
-- 15/07/2008 - Considerar @SueldoBasico>0 para pagarlo...(Cargo no liquidable)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SET NOCOUNT ON
SET DATEFORMAT DMY

DECLARE @Mes INT
DECLARE @DiasAComparar INT
DECLARE @DiasTrabajados INT
DECLARE @DesdeCorrespondiente DATETIME
DECLARE @ImporteMaterialDidactico DECIMAL(18,4)
DECLARE @CabeceraDeLiquidacion INT
DECLARE @Afiliacion INT
DECLARE @RegimenSalarial INT
DECLARE @SubOrganizacion INT
DECLARE @Organizacion INT
DECLARE @SituacionRevista INT
DECLARE @NroError INT
DECLARE @Horas INT
DECLARE @SueldoBasico DECIMAL (18,4)
DECLARE @TipoLiquidacion INT 
DECLARE @MesATrabajarPorMaterialDidactico INT 
DECLARE @DiasNecesariosTrabajadosParaMaterialDidactico INT 
DECLARE @FechaInicioPeriodoLectivoLIQ  VARCHAR(10)
DECLARE @FechaTopeParaControlDias VARCHAR(10)
DECLARE @FechaTopeInicioParaControlDias VARCHAR(10)
DECLARE @FechaArmadaMesRealPagoMaterial VARCHAR(10)

SELECT @CabeceraDeLiquidacion = IdCabeceraLiquidacion FROM tb_Liquidaciones WHERE IdLiquidacion = @IdLiquidacion
SELECT @TipoLiquidacion = TipoDeLiquidacion FROM Tb_CabeceraDeLiquidacion WHERE IDCabeceraDeLiquidacion =  @CabeceraDeLiquidacion

SELECT @MesATrabajarPorMaterialDidactico = CONVERT(INT, dbo.fnObtenerValorDeParametro ('MesATrabajarPorMaterialDidactico', @Hasta))
SELECT @DiasNecesariosTrabajadosParaMaterialDidactico = CONVERT(INT, dbo.fnObtenerValorDeParametro ('DiasNecesariosTrabajadosParaMaterialDidactico', @Hasta))
SELECT @FechaInicioPeriodoLectivoLIQ = CONVERT(VARCHAR(10), dbo.fnObtenerValorDeParametro ('FechaInicioPeriodoLectivoLIQ', @Hasta))
SELECT @ImporteMaterialDidactico = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImportePorMaterialDidactico', @Hasta))

--//Tomar Fecha Fin de liquidacion del servicio (T/S)
SELECT @FechaTopeParaControlDias = CONVERT(VARCHAR(10), dateadd(DAY, @DiasNecesariosTrabajadosParaMaterialDidactico, @FechaInicioPeriodoLectivoLIQ), 103)

SELECT @FechaTopeInicioParaControlDias = CONVERT(VARCHAR(10), dateadd(DAY, @DiasNecesariosTrabajadosParaMaterialDidactico*-1, @Hasta), 103)


SELECT @FechaArmadaMesRealPagoMaterial = convert(VARCHAR(10), convert(DATETIME, '01/'+convert(VARCHAR(2), @MesATrabajarPorMaterialDidactico)+'/'+convert(VARCHAR(4), year(@Desde))),103)


SELECT @SueldoBasico = MontoHaberes FROM tb_RegistroDeLiquidaciones 
	WHERE Liquidacion = @idLiquidacion AND Servicio = @Servicio AND Concepto = 4

SELECT @Afiliacion = idAfiliacion	 FROM tb_Afiliaciones WHERE idAgente = @Agente
SELECT @horas= horas, @regimensalarial = regimensalarial, @SubOrganizacion = SubOrganizacion 
	FROM tb_Plazas WHERE idPlaza = @Plaza
SELECT @Organizacion = ubicacionOrig, @SituacionRevista = SituacionRevista 
	FROM tb_ServiciosAgentes WHERE idservicioAgente =  @Servicio

IF (SELECT OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE
	idSubOrganizacion = @SubOrganizacion) Is Not Null
	SELECT @Organizacion = OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE
	idSubOrganizacion = @SubOrganizacion

SET @NroError = 0 

IF  @SueldoBasico > 0
BEGIN
  IF MONTH(@Desde) = @MesATrabajarPorMaterialDidactico
       BEGIN
	-- Este es el control que se realiza en Febrero cuando se paga Material a toda la gente trabajando en Febrero
	IF NOT EXISTS(SELECT TOP 1 R.Agente FROM tb_RegistroDeLiquidaciones R 
				INNER JOIN tb_Liquidaciones L ON IdLiquidacion = Liquidacion 
					AND YEAR(L.Desde) = YEAR(GETDATE()) 
					AND R.Agente = @Agente 
					AND Concepto = 41 
					AND MontoHaberes > 0
--					AND L.tipo = 4 
  		   		     	AND (  (@tipoliquidacion = 4 AND L.Tipo  = 4 )  --definitiva 
  				   		 OR 
  				   	            ( @tipoliquidacion = 1 AND (L.Tipo = 4 OR (L.Tipo =1 AND L.IDCabeceraLiquidacion =@CabeceraDeLiquidacion ))  )	--simulacion
  				   	 	))	

	         AND 
	   NOT EXISTS(SELECT TOP 1 Agente FROM tb_ServiciosAgentes S 
				INNER JOIN tb_SubServiciosAgentes ON idServicioAgente = ServicioAgente
				INNER JOIN tb_Organizaciones ON idOrganizaciones = UbicacionOrig
			             WHERE Agente = @Agente AND (EsPrivada = 'N' OR EsPrivada IS NULL) AND ( (S.FechaBaja IS NULL) OR (S.FechaBaja IS NOT NULL AND S.FechaBaja > GETDATE()))
		)
		   BEGIN 
			
			INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista,DiasLiquidados, SubOrganizacion)
			VALUES (null, @Afiliacion, @Agente, null, 1, null, 41, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @ImporteMaterialDidactico, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
	
			SELECT @NroError = @@error
  
		   END 
      END 
  ELSE
      BEGIN 	
	-- Esto es para aquellos que tienen 90 dias trabajados 
	IF  DBO.fnLiqDiasTrabajados(@Agente,@FechaTopeInicioParaControlDias, @Hasta,0,NULL) >= @DiasNecesariosTrabajadosParaMaterialDidactico
	  
	  --//Nunca le pagué en el año 
	  AND NOT EXISTS (SELECT rl.Agente FROM tb_RegistroDeLiquidaciones  RL 
						   INNER JOIN tb_Liquidaciones L ON L.idLiquidacion = RL.Liquidacion 
						   WHERE RL.Concepto = 41
						     AND RL.MontoHaberes > 0 
						     AND L.Anio = YEAR(@Desde)
						     AND RL.Agente =@Agente
--						     AND L.tipo = 4 
  				   		     AND (  (@tipoliquidacion = 4 AND L.Tipo  = 4 )  --definitiva 
  				   		     	    OR 
  				   		     	    ( @tipoliquidacion = 1 AND (L.Tipo = 4 OR (L.Tipo =1 AND L.IDCabeceraLiquidacion =@CabeceraDeLiquidacion ))  )	--simulacion
  				   		     	 ))	

	  --//No tiene un servicio en Público con 90 dias trabajados						     
	  AND NOT EXISTS ( SELECT S1.Agente
					    FROM tb_ServiciosAgentes S1      
						INNER JOIN tb_Organizaciones O1 ON O1.idOrganizaciones = S1.UbicacionOrig 
						WHERE ((O1.EsPrivada = 'N') OR (O1.EsPrivada IS NULL))
						  AND S1.Agente = @Agente
						  AND ((S1.FechaAlta < @FechaInicioPeriodoLectivoLIQ AND (S1.FechaBaja IS NULL OR S1.FechaBaja > @FechaArmadaMesRealPagoMaterial))
--						      OR (S1.FechaAlta = @FechaInicioPeriodoLectivoLIQ AND (S1.FechaBaja IS NULL OR S1.FechaBaja > @FechaTopeParaControlDias))))
							--//Veo que en publico tenga un servicio con 90 dias trabajados
						      OR (S1.FechaAlta >= @FechaInicioPeriodoLectivoLIQ AND (Datediff(DAY,S1.FechaAlta,ISNull(S1.FechaBaja,@Hasta)) >= @DiasNecesariosTrabajadosParaMaterialDidactico))))
		BEGIN

			INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista,DiasLiquidados, SubOrganizacion)
			VALUES (null, @Afiliacion, @Agente, null, 1, null, 41, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @ImporteMaterialDidactico, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
	
			SELECT @NroError = @@error
			
		END 

    END 
END
		
IF @NroError <> 0
BEGIN
	INSERT INTO tb_ErroresLiquidacion (Agente, Concepto, Diagnostico, Fecha, Liquidacion, Organizacion, Servicio, CabeceraDeLiquidacion, NumeroDeError) 
	VALUES(@Agente, 41, convert(varchar,@NroError), getdate(), @idLiquidacion,@Organizacion, @Servicio, @CabeceraDeLiquidacion, @NroError)
END
GO
